package com.yanxu.design01_singleton.lazy;

/**
 * @author 折戟沉沙铁未销
 * @version V1.0
 * @date 2025/4/9-2025
 * @Description: 双重检查实现 懒加载单例模式
 */
public class Lazy02_DoubleCheckSingleton1 {
    //声明
    private static Lazy02_DoubleCheckSingleton1 instance = null;

    //构造方法私有化
    private Lazy02_DoubleCheckSingleton1() {
    }

    //使用双重检查机制。
    public static Lazy02_DoubleCheckSingleton1 getInstance() {
        //第一次检查
        if (instance == null) {
            synchronized (Lazy02_DoubleCheckSingleton1.class) {
                //第二次检查
                if (instance == null) {
                    instance = new Lazy02_DoubleCheckSingleton1();
                    /*
                     * 在  instance=new LazyDoubleCheckSingleton(); 这个过程，要经历三个步骤
                     * 1. 在堆内存中开辟空间
                     * 2. 初始化这个对象
                     * 3. 设置 instance 指向刚才分配的内存地址
                     *
                     * 这三个步骤中，2和3 可能会被重排序。
                     * */
                }
            }
        }
        return instance;
    }
}